package study.datastructure.stack.leetcode;/**
 * @program: datastructure
 * @author: lcy
 * @create: 2024-10-25 12:52
 * <p>
 * 2024/10/25,
 * <p>
 * 2024/10/25,
 */

/**
 2024/10/25,
 */

import study.datastructure.stack.ArrayStack;

/**
 * 20. 有效的括号
 * 简单
 * 相关标签
 * 相关企业
 * 提示
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 *
 * 有效字符串需满足：
 *
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 * 每个右括号都有一个对应的相同类型的左括号。
 */
public class Client20 {

    /**
     * 题目思路的分析：  每个左括号都需要和右括号相对应 可以 用栈来存储这样的关系 先进后出 并且
     * 我在加入元素时 给一个相反的元素（括号） 如果是左括号就添加 右括号就peek出来比较 不等就意味着无效
     * @param s
     * @return
     */
    public boolean isValid(String s) {
        ArrayStack<Character> stack = new ArrayStack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') {
                stack.push(')');
            } else if (c == '[') {
                stack.push(']');
            } else if (c == '{') {
                stack.push('}');
            } else {  //传入的是右括号了嘛
                if (!stack.isEmpty() && c == stack.peek()) {
                    stack.pop(); //弹出来 继续比较
                } else {
                    return false;
                }

            }
        }
        return stack.isEmpty(); //非空意味着 元素没有配对完
    }
}
